Preprocessing articles
Converting your scopus collection into a bibliographic dataframe
Warning in convert2df(file = files[1], dbsource = "scopus", format = "csv") :
NAs introduced by coercion
Done!
Generating affiliation field tag AU_UN from C1: Done!
Converting your scopus collection into a bibliographic dataframe
Done!
Generating affiliation field tag AU_UN from C1: Done!
Networks Bibliographic
Restrict the network
Merge with main data
Aggregated Network
Network Cocitation
Error: object 'g_cit' not found
A ggregated Network
Warning in rm(mat_cit, g_cit, g_cit_agg) : object 'mat_cit' not found
Warning in rm(mat_cit, g_cit, g_cit_agg) : object 'g_cit_agg' not found
2 mode network
Joining, by = "XX"
Topicmodel
Warning: Expected 3 pieces. Missing pieces filled with `NA` in 1180536 rows [1, 2, 4, 5, 7, 8, 10, 11, 13, 14, 16, 17, 19, 20, 22, 23, 25, 26, 28, 29, ...].
fit models...
During startup - Warning messages:
1: Setting LC_COLLATE failed, using "C"
2: Setting LC_TIME failed, using "C"
3: Setting LC_MESSAGES failed, using "C"
4: Setting LC_MONETARY failed, using "C"
During startup - Warning messages:
1: Setting LC_COLLATE failed, using "C"
2: Setting LC_TIME failed, using "C"
3: Setting LC_MESSAGES failed, using "C"
4: Setting LC_MONETARY failed, using "C"
During startup - Warning messages:
1: Setting LC_COLLATE failed, using "C"
2: Setting LC_TIME failed, using "C"
3: Setting LC_MESSAGES failed, using "C"
4: Setting LC_MONETARY failed, using "C"
During startup - Warning messages:
1: Setting LC_COLLATE failed, using "C"
2: Setting LC_TIME failed, using "C"
3: Setting LC_MESSAGES failed, using "C"
4: Setting LC_MONETARY failed, using "C"
done.
calculate metrics:
Griffiths2004... done.
CaoJuan2009... done.
Arun2010... done.
Deveaud2014... done.
Warning: `guides(<scale> = FALSE)` is deprecated. Please use `guides(<scale> = "none")` instead.


Warning in if (class(X) == "dist") { :
the condition has length > 1 and only the first element will be used
sigma summary: Min. : 33554432 |1st Qu. : 33554432 |Median : 33554432 |Mean : 33554432 |3rd Qu. : 33554432 |Max. : 33554432 |
Epoch: Iteration #100 error is: 10.7772497668092
Epoch: Iteration #200 error is: 0.366228799621675
Epoch: Iteration #300 error is: 0.283594329454623
Epoch: Iteration #400 error is: 0.279540706669522
Epoch: Iteration #500 error is: 0.270012158821152
Epoch: Iteration #600 error is: 0.268385261201972
Epoch: Iteration #700 error is: 0.268373980675531
Epoch: Iteration #800 error is: 0.268373776219343
Epoch: Iteration #900 error is: 0.268373515394795
Epoch: Iteration #1000 error is: 0.268373208955506
Loading required namespace: servr
To stop the server, run servr::daemon_stop(1) or restart your R session
Serving the directory /private/var/folders/34/_4xm8_d96wl8vhw6nq91nrhw0000gn/T/RtmpgxERrH/filec05627e478e6 at http://127.0.0.1:4321
To stop the server, run servr::daemon_stop(2) or restart your R session
Serving the directory /Users/dsh/OneDrive - Aalborg Universitet/01 - Research/project_2022_biblio_lux_eval/biblio_lux_2022_github/output/LDAviz_liser_ud.rds at http://127.0.0.1:5162
Local citations
Historical citation
SCOPUS DB: Searching local citations (LCS) by document titles (TI) and DOIs...
Found 1047 documents with no empty Local Citations (LCS)
Legend
$net
IGRAPH c4ea27c DN-- 41 87 --
+ attr: name (v/c), title (v/c), id (v/c), size (v/n), years (v/n), color (e/c)
+ edges from c4ea27c (vertex names):
[1] ZARABI Z, 2019, SUSTAINABILITY ->GERBER P, 2020, TRANSP RES PART F TRAFFIC PSYCHOL BEHAV
[2] ZARABI Z, 2019, SUSTAINABILITY ->MA T-Y, 2021, TRANSP RES PART D TRANSP ENVIRON-a
[3] ZARABI Z, 2019, SUSTAINABILITY ->KAMRUZZAMAN M, 2021, J TRANSP GEOGR
[4] GERBER P, 2020, TRANSP RES PART F TRAFFIC PSYCHOL BEHAV->MA T-Y, 2021, TRANSP RES PART D TRANSP ENVIRON-a
[5] DE VOS J, 2018, TRANSP RES PART A POLICY PRACT ->ZARABI Z, 2019, SUSTAINABILITY
[6] DE VOS J, 2018, TRANSP RES PART A POLICY PRACT ->GERBER P, 2020, TRANSP RES PART F TRAFFIC PSYCHOL BEHAV
[7] DE VOS J, 2018, TRANSP RES PART A POLICY PRACT ->DE VOS J, 2019, TRANSP RES PART F TRAFFIC PSYCHOL BEHAV
[8] DE VOS J, 2018, TRANSP RES PART A POLICY PRACT ->VAN WEE B, 2019, J TRANSP GEOGR
+ ... omitted several edges
$g
$layout
$axis
NA


Other stuff
Threefield Plot
rm(M_threefield)
#M %>% authorProdOverTime(k = 10, graph = TRUE) #M %>% rpys(sep = “;”, graph = T) #M %>% thematicMap() #M_them_evo <- M %>% thematicEvolution(years = c(2016, 2018,2021))
Conceptual Structure
#CS <- M %>% conceptualStructure(field=“ID”, method=“CA”, minDegree=4, clust=5, stemming=FALSE, labelsize=10, documents=10) #CS %>% saveRDS(“../temp/CS.RDS”) #rm(CS)
mat_bib %<>% normalizeSimilarity(type = “association”) # NOTE: We do not normalize on the biblio-network publication level anymore.
LS0tCnRpdGxlOiAiTHV4ZW1ib3VyZyBSZXNlYXJjaCBFdmFsdWF0aW9uIDIwMjIiCmF1dGhvcjogIkRhbmllbCBTLiBIYWluIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy50aW1lKCksICclZCAlQiwgJVknKWAiCm91dHB1dDoKICBodG1sX25vdGVib29rOgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICB0b2M6IG5vCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKLS0tCgotLS0KdGl0bGU6ICJMdXhlbWJvdXJnIFJlc2VhcmNoIEV2YWx1YXRpb24gMjAyMiIKYXV0aG9yOiAiRGFuaWVsIFMuIEhhaW4iCmRhdGU6ICJgciBmb3JtYXQoU3lzLnRpbWUoKSwgJyVkICVCLCAlWScpYCIKb3V0cHV0OgogIHBkZl9kb2N1bWVudDoKICAgIHRvYzogbm8KICBodG1sX25vdGVib29rOgogICAgZGZfcHJpbnQ6IHBhZ2VkCiAgICB0b2M6IG5vCiAgICBjb2RlX2ZvbGRpbmc6IGhpZGUKLS0tCgpgYGB7ciBzZXR1cCwgaW5jbHVkZT1GQUxTRX0KIyMjIEdlbmVyaWMgcHJlYW1ibGUKcm0obGlzdD1scygpKQpTeXMuc2V0ZW52KExBTkcgPSAiZW4iKQpvcHRpb25zKHNjaXBlbiA9IDUpCnNldC5zZWVkKDEzMzcpCgojIyMgTG9hZCBwYWNrYWdlcyAgCmxpYnJhcnkoa25pdHIpICMgRm9yIGRpc3BsYXkgb2YgdGhlIG1hcmtkb3duCmxpYnJhcnkoa2FibGVFeHRyYSkgIyBGb3IgdGFibGUgc3R5bGluZwoKbGlicmFyeSh0aWR5dmVyc2UpCmxpYnJhcnkobWFncml0dHIpCgojIyMgRXh0cmEgcGFja2FnZXMKbGlicmFyeShiaWJsaW9tZXRyaXgpCmxpYnJhcnkodGlkeWdyYXBoKQoKIyBvd24gZnVuY3Rpb25zCnNvdXJjZSgiZnVuY3Rpb25zL2Z1bmN0aW9uc19iYXNpYy5SIikKIyBzb3VyY2UoImZ1bmN0aW9ucy8wMF9wYXJhbWV0ZXJzLlIiKQpgYGAKCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlPUZBTFNFfQprbml0cjo6b3B0c19jaHVuayRzZXQoZWNobyA9IEZBTFNFLAogICAgICAgICAgICAgICAgICAgICAgd2FybmluZyA9IEZBTFNFLCAKICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgPSBGQUxTRSkKYGBgCgpgYGB7ciwgaW5jbHVkZT1GQUxTRX0KdmFyX2luc3QgPC0gJ0xJU0VSJwp2YXJfZGVwdCA8LSAnVUQnCmBgYAoKIyBQcmVwcm9jZXNzaW5nIGFydGljbGVzCgpgYGB7cn0KZmlsZXMgPC0gbGlzdC5maWxlcyhwYXRoID0gJy4uL2RhdGEvJywgcGF0dGVybiA9IHBhc3RlMCgnc2NvcHVzXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJ19zZWVkJyksIGZ1bGwubmFtZXMgPSBUUlVFKQpgYGAKCmBgYHtyfQojIExvYWQgYmlibGlvZ3JhcGhpYyBkYXRhCk0gPC0gY29udmVydDJkZihmaWxlID0gZmlsZXNbMV0sIGRic291cmNlID0gInNjb3B1cyIsIGZvcm1hdCA9ICJjc3YiKSAlPiUgbXV0YXRlKGludF9kZXB0ID0gVFJVRSkgJT4lIAogIGJpbmRfcm93cyhjb252ZXJ0MmRmKGZpbGUgPSBmaWxlc1stMV0sIGRic291cmNlID0gInNjb3B1cyIsIGZvcm1hdCA9ICJjc3YiKSAlPiUgbXV0YXRlKGludF9kZXB0ID0gRkFMU0UpKSAlPiUKICAjIERlbGV0ZSBkdXBsaWNhdGVzIChCZXR0ZXIgdXNlIEVJRCkKICBkaXN0aW5jdChVVCwgLmtlZXBfYWxsID0gVFJVRSkKCnJtKGZpbGVzKQpgYGAKCmBgYHtyfQojIEV4dHJhY3QgTWV0YSBUYWdzICNUT0RPOiBNYXliZSBtb3JlPwpNICU8PiUgbWV0YVRhZ0V4dHJhY3Rpb24oRmllbGQgPSAiQVVfQ08iLCBhZmYuZGlzYW1iID0gVFJVRSwgc2VwID0gIjsiKQpNICU8PiUgbWV0YVRhZ0V4dHJhY3Rpb24oRmllbGQgPSAiQVUxX0NPIiwgYWZmLmRpc2FtYiA9IFRSVUUsIHNlcCA9ICI7IikKTSAlPD4lIG1ldGFUYWdFeHRyYWN0aW9uKEZpZWxkID0gIkFVMV9VTiIsIGFmZi5kaXNhbWIgPSBUUlVFLCBzZXAgPSAiOyIpCk0gJTw+JSBtZXRhVGFnRXh0cmFjdGlvbihGaWVsZCA9ICJTUiIsIGFmZi5kaXNhbWIgPSBUUlVFLCBzZXAgPSAiOyIpCk0gJTw+JSBtZXRhVGFnRXh0cmFjdGlvbihGaWVsZCA9ICJDUl9BVSIsIGFmZi5kaXNhbWIgPSBUUlVFLCBzZXAgPSAiOyIpCk0gJTw+JSBtZXRhVGFnRXh0cmFjdGlvbihGaWVsZCA9ICJDUl9TTyIsIGFmZi5kaXNhbWIgPSBUUlVFLCBzZXAgPSAiOyIpCmBgYAoKCmBgYHtyfQojIGNyZWF0ZSBsYWJlbApNICU8PiUgcm93bmFtZXNfdG9fY29sdW1uKCdYWCcpICU+JSAKICBtdXRhdGUoWFggPSBwYXN0ZShzdHJfZXh0cmFjdChYWCwgcGF0dGVybiA9ICIuKlxcZHs0fSIpLCBzdHJfc3ViKFRJLCAxLDI1KSkgJT4lIHN0cl9yZXBsYWNlX2FsbCgiW15bOmFsbnVtOl1dIiwgIiAiKSAlPiUgc3RyX3NxdWlzaCgpICU+JSBzdHJfcmVwbGFjZV9hbGwoIiAiLCAiXyIpICU+JSBtYWtlLnVuaXF1ZShzZXA9J18nKSkgJT4lCiAgIyBGaWx0ZXIgb3V0CiAgbXV0YXRlKENSX24gPSBDUiAlPiUgc3RyX2NvdW50KCc7JykpICU+JQogIGZpbHRlcihDUl9uID49IDUpICU+JQogICMgQWJzdHJhY3QKICBmaWx0ZXIoQUIgIT0gJycpICU+JQogIGZpbHRlcihBQiAlPiUgc3RyX2xlbmd0aCgpID49IDI1KQoKIyBTZXR0aW5nIHJvd25hbWVzCnJvd25hbWVzKE0pIDwtIE0kWFgKYGBgCgpgYGB7cn0KIyBOdW1iZXIgb2YgY2l0ZWQgcmVmZXJlbmNlcyBhbmQgY2l0YXRpb25zCk0gJTw+JSAKICBtdXRhdGUoVENfeWVhciA9IFRDIC8gKDIwMjMgLSBQWSkpICU+JSAKICBmaWx0ZXIoVENfeWVhciA+PSAxIHwgaW50X2RlcHQgPT0gVFJVRSkgCiMgJT4lIGZpbHRlcihwZXJjZW50X3JhbmsoVENfeWVhcikgPj0gMC41KQoKYGBgCgpgYGB7cn0KIyBTYXZlIHdob2xlIGNvbXBpbGF0aW9uCk0gJT4lIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL01fJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKQojIE0gPC0gcmVhZF9yZHMocGFzdGUwKCdNXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgoKIyBOZXR3b3JrcyBCaWJsaW9ncmFwaGljCgpgYGB7cn0KbWF0X2JpYiA8LSBNICAlPiUgYmlibGlvTmV0d29yayhhbmFseXNpcyA9ICJjb3VwbGluZyIsIG5ldHdvcmsgPSAicmVmZXJlbmNlcyIsIHNlcCA9ICI7Iiwgc2hvcnRsYWJlbCA9ICBGQUxTRSkKIyBtYXRfYmliICU+JSBzYXZlUkRTKHBhc3RlMCgnLi4vdGVtcC9tYXRfYmliX18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCiMgbWF0X2JpYiA8LSByZWFkUkRTKHBhc3RlMCgnLi4vdGVtcDdtYXRfYmliX18nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKYGBge3J9CmdfYmliIDwtIG1hdF9iaWIgJT4lIGlncmFwaDo6Z3JhcGhfZnJvbV9hZGphY2VuY3lfbWF0cml4KG1vZGUgPSAidW5kaXJlY3RlZCIsIHdlaWdodGVkID0gVFJVRSwgZGlhZyA9IEZBTFNFKSAlPiUgCiAgaWdyYXBoOjpzaW1wbGlmeSgpICU+JQogIGFzX3RibF9ncmFwaChkaXJlY3RlZCA9IEZBTFNFKSAlTj4lIAogIGxlZnRfam9pbihNICU+JSBzZWxlY3QoWFgsIFBZLCBDUl9uLCBUQ195ZWFyLCBpbnRfZGVwdCksIGJ5ID0gYygibmFtZSIgPSAiWFgiKSkKYGBgCgojIyBSZXN0cmljdCB0aGUgbmV0d29yawoKYGBge3J9CiMgSW5pdGlhbCBGaWx0ZXIKY3V0b2ZfZWRnZV9iaWIgPC0gMgpjdXRvZl9ub2RlX2JpYiA8LSA1CgpjdXRvZl9lZGdlX3BjdF9iaWIgPC0gMC4wMApjdXRvZl9ub2RlX3BjdF9iaWIgPC0gMC4wMApgYGAKCmBgYHtyfQpnX2JpYiA8LSBnX2JpYiAlRT4lIAogIGZpbHRlcih3ZWlnaHQgPj0gY3V0b2ZfZWRnZV9iaWIpCgpnX2JpYiA8LSBnX2JpYiAlTj4lCiAgZmlsdGVyKCFub2RlX2lzX2lzb2xhdGVkKCkgIHwgaW50X2RlcHQgPT0gVFJVRSkgJU4+JQogIG11dGF0ZShkZ3IgPSBjZW50cmFsaXR5X2RlZ3JlZSh3ZWlnaHRzID0gd2VpZ2h0KSkgJU4+JSAKICBmaWx0ZXIoZGdyID49IGN1dG9mX25vZGVfYmliIHwgaW50X2RlcHQgPT0gVFJVRSkKYGBgCgpgYGB7cn0KIyBKYWNjYXJkIHdlaWdodGluZwpnX2JpYiA8LSBnX2JpYiAlRT4lIAogIG11dGF0ZSh3ZWlnaHRfamFjID0gd2VpZ2h0IC8gKC5OKCkkQ1Jfbltmcm9tXSArIC5OKCkkQ1Jfblt0b10gLSB3ZWlnaHQpICkgJUU+JQogIG11dGF0ZSh3ZWlnaHRfamFjID0gaWZfZWxzZSh3ZWlnaHRfamFjID4gMSwgMSwgd2VpZ2h0X2phYykgKSAlTj4lCiAgbXV0YXRlKGRncl9qYWMgPSBjZW50cmFsaXR5X2RlZ3JlZSh3ZWlnaHRzID0gd2VpZ2h0X2phYykpIApgYGAKCmBgYHtyfQojICMgSW5zcGVjdAojIGdfYmliICVOPiUgYXNfdGliYmxlKCkgJT4lIHNraW1yOjpza2ltKCkKIyBnX2JpYiAlRT4lIGFzX3RpYmJsZSgpICU+JSBza2ltcjo6c2tpbSgpCmBgYAoKYGBge3J9CiMgRnVydGhlciByZXN0cmljdGlvbnMKZ19iaWIgPC0gZ19iaWIgICVOPiUKICBmaWx0ZXIocGVyY2VudF9yYW5rKGRncl9qYWMpID49IGN1dG9mX25vZGVfcGN0X2JpYiB8IGludF9kZXB0ID09IFRSVUUpICVFPiUgCiAgZmlsdGVyKHBlcmNlbnRfcmFuayh3ZWlnaHRfamFjKSA+PSBjdXRvZl9lZGdlX3BjdF9iaWIpICVOPiUKICBmaWx0ZXIoIW5vZGVfaXNfaXNvbGF0ZWQoKSB8IGludF9kZXB0ID09IFRSVUUpCmBgYAoKIyMgQ29tbXVuaXR5IERldGVjdGlvbgoKYGBge3J9CmdfYmliIDwtIGdfYmliICVOPiUKICBtdXRhdGUoY29tID0gZ3JvdXBfbG91dmFpbih3ZWlnaHRzID0gd2VpZ2h0X2phYykpICU+JQogIG1vcnBoKHRvX3NwbGl0LCBjb20pICU+JSAKICBtdXRhdGUoZGdyX2ludCA9IGNlbnRyYWxpdHlfZGVncmVlKHdlaWdodHMgPSB3ZWlnaHRfamFjKSkgJU4+JQogIHVubW9ycGgoKQpgYGAKCmBgYHtyfQpnX2JpYiAlTj4lIGFzX3RpYmJsZSgpICU+JSBjb3VudChjb20sIHNvcnQgPSBUUlVFKQpgYGAKCmBgYHtyfQojIGNvbW11bml0eSBkZXRlY3Rpb24KY29tX3NpemVfYmliIDwtIDEwMApgYGAKCmBgYHtyfQojIENvbW11bml0eSBzaXplIHJlc3RyaWN0aW9uCmdfYmliIDwtIGdfYmliICVOPiUKICBhZGRfY291bnQoY29tLCBuYW1lID0gJ2NvbV9uJykgJT4lCiAgbXV0YXRlKGNvbSA9IGlmZWxzZShjb21fbiA+PSBjb21fc2l6ZV9iaWIsIGNvbSwgTkEpICkgJT4lCiAgc2VsZWN0KC1jb21fbikgIAoKIyBEZWxldGUgbm9kZXMgd2l0aG91IGNvbW11bml0eQpnX2JpYiA8LSBnX2JpYiAlTj4lCiAgZmlsdGVyKCFpcy5uYShjb20pIHwgaW50X2RlcHQgPT0gVFJVRSkKYGBgCgpgYGB7cn0KIyBVcGRhdGUgZGVncmVlCmdfYmliIDwtIGdfYmliICVOPiUKICBtdXRhdGUoZGdyID0gY2VudHJhbGl0eV9kZWdyZWUod2VpZ2h0cyA9IHdlaWdodCksCiAgICAgICAgIGRncl9qYWMgPSBjZW50cmFsaXR5X2RlZ3JlZSh3ZWlnaHRzID0gd2VpZ2h0X2phYykpCmBgYAoKYGBge3J9CiMgU2F2ZSB0aGUgb2JqZWN0cyB3ZSBuZWVkIGxhdGVyb24KZ19iaWIgJT4lIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL2dfYmliXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgojIyBNZXJnZSB3aXRoIG1haW4gZGF0YQoKYGBge3J9Ck1fYmliIDwtIE0gJT4lIHNlbGVjdChYWCkgJT4lIGlubmVyX2pvaW4oZ19iaWIgJU4+JSBhc190aWJibGUoKSAlPiUgc2VsZWN0KG5hbWUsIGRnciwgZGdyX2phYywgY29tLCBkZ3JfaW50KSwgYnkgPSBjKCdYWCcgPSAnbmFtZScpKSAlPiUKICBkaXN0aW5jdChYWCwgLmtlZXBfYWxsID0gVFJVRSkgCgpNX2JpYiAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvTV9iaWJfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKQpgYGAKCiMjIEFnZ3JlZ2F0ZWQgTmV0d29yawoKYGBge3J9CnJlcXVpcmUoUk5ld3NmbG93KQpnX2JpYl9hZ2cgPC0gZ19iaWIgJU4+JQogIGZpbHRlcighaXMubmEoY29tKSkgJT4lCiAgbmV0d29ya19hZ2dyZWdhdGUoYnkgPSAiY29tIiwgZWRnZV9hdHRyaWJ1dGUgPSAid2VpZ2h0X2phYyIsIGFnZ19GVU4gPSBzdW0pICAlPiUKICBhcy51bmRpcmVjdGVkKG1vZGUgPSAiY29sbGFwc2UiLCBlZGdlLmF0dHIuY29tYiA9ICJzdW0iKSAlPiUKICBhc190YmxfZ3JhcGgoZGlyZWN0ZWQgPSBGQUxTRSkgJU4+JQogIHNlbGVjdCgtbmFtZSkgJT4lCiAgbXV0YXRlKGlkID0gMTpuKCkpICVFPiUKICByZW5hbWUod2VpZ2h0ID0gYWdnLndlaWdodF9qYWMpICU+JQogIHNlbGVjdChmcm9tLCB0bywgd2VpZ2h0KQpgYGAKCmBgYHtyfQojIyBXZWlnaHQgZWRnZXMKIyBnX2JpYl9hZ2cgPC0gZ19iaWJfYWdnICVFPiUKIyAgIHJlbmFtZSh3ZWlnaHRfY291bnQgPSB3ZWlnaHQpICU+JQojICAgbXV0YXRlKHdlaWdodCA9IHdlaWdodF9jb3VudCAvICguTigpJE5bZnJvbV0gKiAuTigpJE5bdG9dKSApICU+JQojICAgbXV0YXRlKHdlaWdodCA9ICh3ZWlnaHQgKiAxMDApICU+JSByb3VuZCg0KSkgJU4+JQojICAgbXV0YXRlKGRnciA9IGNlbnRyYWxpdHlfZGVncmVlKHdlaWdodHMgPSB3ZWlnaHQpKQpgYGAKCmBgYHtyfQojIFNhdmUgdGhlIG9iamVjdHMgd2UgbmVlZCBsYXRlcm9uCmdfYmliX2FnZyAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvZ19iaWJfYWdnXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgpgYGB7cn0KIyBEZWxldGUgYWxsIHdlIGRvbnQgbmVlZApybShtYXRfYmliLCBnX2JpYiwgY29tX3NpemVfYmliLCBjdXRvZl9lZGdlX2JpYiwgY3V0b2Zfbm9kZV9iaWIsIGdfYmliX2FnZykKYGBgCgoKIyBOZXR3b3JrIENvY2l0YXRpb24gCgpgYGB7cn0KbWF0X2NpdCA8LSBNICU+JQogIHNlbWlfam9pbihNX2JpYiwgYnkgPSAnWFgnKSAlPiUKICBhcy5kYXRhLmZyYW1lKCkgJT4lIAogIGJpYmxpb05ldHdvcmsoYW5hbHlzaXMgPSAiY28tY2l0YXRpb24iLCBuZXR3b3JrID0gInJlZmVyZW5jZXMiLCBzZXAgPSAiOyIsIHNob3J0bGFiZWwgPSBGQUxTRSkKYGBgCgpgYGB7cn0KbWF0X2NpdCAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvbWF0X2NpdF8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCiMgbWF0X2NpdCA8LSByZWFkUkRTKHBhc3RlMCgnLi4vdGVtcC90ZW1wL21hdF9jaXRfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKQpgYGAKCmBgYHtyfQpnX2NpdCA8LSBtYXRfY2l0ICU+JSBpZ3JhcGg6OmdyYXBoX2Zyb21fYWRqYWNlbmN5X21hdHJpeChtb2RlID0gInVuZGlyZWN0ZWQiLCB3ZWlnaHRlZCA9IFRSVUUsIGRpYWcgPSBGQUxTRSkgJT4lIAogIGlncmFwaDo6c2ltcGxpZnkoKSAlPiUKICBhc190YmxfZ3JhcGgoZGlyZWN0ZWQgPSBGQUxTRSkgIyAlTj4lIGxlZnRfam9pbihNICU+JSBzZWxlY3QoWFgsIFNSLCBQWSwgVEMsIEo5KSwgYnkgPSBjKCJuYW1lIiA9ICJYWCIpKSAlPiUgbXV0YXRlKGlkID0gMTpuKCkpIApgYGAKCmBgYHtyfQojIEluaXRpYWwgRmlsdGVyCmN1dG9mX2VkZ2VfY2l0IDwtIDIKY3V0b2Zfbm9kZV9jaXQgPC0gNQoKY3V0b2ZfZWRnZV9wY3RfY2l0IDwtIDAuMjUKY3V0b2Zfbm9kZV9wY3RfY2l0IDwtIDAuMjUKYGBgCgpgYGB7cn0KIyBSZXN0cmljdCB0aGUgbmV0d29yawpnX2NpdCA8LSBnX2NpdCAlRT4lIAogIGZpbHRlcih3ZWlnaHQgPj0gY3V0b2ZfZWRnZV9jaXQpICVOPiUKICBmaWx0ZXIoIW5vZGVfaXNfaXNvbGF0ZWQoKSkKCmdfY2l0IDwtIGdfY2l0ICVOPiUKICBtdXRhdGUoZGdyID0gY2VudHJhbGl0eV9kZWdyZWUod2VpZ2h0cyA9IHdlaWdodCkpICVOPiUKICBmaWx0ZXIoZGdyID49IGN1dG9mX25vZGVfY2l0KSAKYGBgCgpgYGB7cn0KIyBGdXJ0aGVyIHJlc3RyaWN0aW9ucwpnX2NpdCA8LSBnX2NpdCAlTj4lIAogIGZpbHRlcihwZXJjZW50X3JhbmsoZGdyKSA+PSBjdXRvZl9ub2RlX3BjdF9jaXQpICVFPiUKICBmaWx0ZXIocGVyY2VudF9yYW5rKHdlaWdodCkgPj0gY3V0b2ZfZWRnZV9wY3RfY2l0KSAlTj4lCiAgZmlsdGVyKCFub2RlX2lzX2lzb2xhdGVkKCkpCmBgYAoKIyMgQ29tbXVuaXR5IERldGVjdGlvbgoKYGBge3J9CmdfY2l0IDwtIGdfY2l0ICVOPiUKICBtdXRhdGUoY29tID0gZ3JvdXBfbG91dmFpbih3ZWlnaHRzID0gd2VpZ2h0KSkgJU4+JQogIG1vcnBoKHRvX3NwbGl0LCBjb20pICU+JSAKICBtdXRhdGUoZGdyX2ludCA9IGNlbnRyYWxpdHlfZGVncmVlKHdlaWdodHMgPSB3ZWlnaHQpKSAlPiUKICB1bm1vcnBoKCkKYGBgCgpgYGB7cn0KZ19jaXQgJU4+JSBhc190aWJibGUoKSAlPiUgY291bnQoY29tKQpgYGAKCmBgYHtyfQojIGNvbW11bml0eSBkZXRlY3Rpb24KY29tX3NpemVfY2l0IDwtIDIwMApgYGAKCgpgYGB7cn0KIyBDb21tdW5pdHkgc2l6ZSByZXN0cmljdGlvbgpnX2NpdCA8LSBnX2NpdCAlTj4lCiAgYWRkX2NvdW50KGNvbSwgbmFtZSA9ICdjb21fbicpICU+JQogIG11dGF0ZShjb20gPSBpZmVsc2UoY29tX24gPj0gY29tX3NpemVfY2l0LCBjb20sIE5BKSApICU+JQogIHNlbGVjdCgtY29tX24pICAKCiMgRGVsZXRlIG5vZGVzIHdpdGhvdSBjb21tdW5pdHkKZ19jaXQgPC0gZ19jaXQgJU4+JQogIGZpbHRlcighaXMubmEoY29tKSkKCiMgVXBkYXRlIGRlZ3JlZQpnX2NpdCA8LSBnX2NpdCAlTj4lCiAgbXV0YXRlKGRnciA9IGNlbnRyYWxpdHlfZGVncmVlKHdlaWdodHMgPSB3ZWlnaHQpKQpgYGAKCmBgYHtyfQojIFNhdmUgdGhlIG9iamVjdHMgd2UgbmVlZCBsYXRlcm9uCmdfY2l0ICU+JSBzYXZlUkRTKHBhc3RlMCgnLi4vdGVtcC9nX2NpdF8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKYGBge3J9CiMgZ2VuZXJhdGUgY2l0YXRpb24gcmVwb3J0CkNfbncgPC0gZ19jaXQgJU4+JSBhc190aWJibGUoKSAKQ19udyAlPiUgIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL0NfbndfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKQpgYGAKCiMjIEEgZ2dyZWdhdGVkIE5ldHdvcmsKCmBgYHtyfQpyZXF1aXJlKFJOZXdzZmxvdykKZ19jaXRfYWdnIDwtIGdfY2l0ICU+JQogIG5ldHdvcmtfYWdncmVnYXRlKGJ5ID0gImNvbSIsIGVkZ2VfYXR0cmlidXRlID0gIndlaWdodCIsIGFnZ19GVU4gPSBzdW0pICAlPiUKICBhcy51bmRpcmVjdGVkKG1vZGUgPSAiY29sbGFwc2UiLCBlZGdlLmF0dHIuY29tYiA9ICJzdW0iKSAlPiUKICBhc190YmxfZ3JhcGgoZGlyZWN0ZWQgPSBGQUxTRSkgJU4+JQogIHNlbGVjdCgtbmFtZSkgJT4lCiAgbXV0YXRlKGlkID0gMTpuKCkpICVFPiUKICByZW5hbWUod2VpZ2h0ID0gYWdnLndlaWdodCkgJT4lCiAgc2VsZWN0KGZyb20sIHRvLCB3ZWlnaHQpCmBgYAoKYGBge3J9CmdfY2l0X2FnZyAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvZ19jaXRfYWdnXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgpgYGB7cn0Kcm0obWF0X2NpdCwgZ19jaXQsIGdfY2l0X2FnZykKYGBgCgoKIyAyIG1vZGUgbmV0d29yayAKCgpgYGB7cn0Kcm93bmFtZXMoTSkgPC0gTSAlPiUgcHVsbChYWCkKCm1fMm0gPC0gTSAlPiUgCiAgc2VtaV9qb2luKE1fYmliKSAlPiUKICBhcy5kYXRhLmZyYW1lKCkgJT4lIGNvY01hdHJpeChGaWVsZCA9ICJDUiIsIHNlcCA9ICI7Iiwgc2hvcnQgPSBGQUxTRSkKYGBgCgpgYGB7cn0KZ18ybSA8LSBtXzJtICU+JSBpZ3JhcGg6OmdyYXBoX2Zyb21faW5jaWRlbmNlX21hdHJpeChkaXJlY3RlZCA9IFRSVUUsIG1vZGUgPSAnb3V0JywgbXVsdGlwbGUgPSBGQUxTRSkgJT4lIAogIGlncmFwaDo6c2ltcGxpZnkoKSAKYGBgCgpgYGB7cn0KZWxfMm0gPC0gZ18ybSAlPiUKICBnZXQuZWRnZWxpc3QoKSAlPiUKICBhc190aWJibGUoKSAlPiUKICByZW5hbWUoZnJvbSA9IFYxLAogICAgICAgICB0byA9IFYyKQpgYGAKCmBgYHtyfQplbF8ybSAlPD4lCiAgbGVmdF9qb2luKE1fYmliICU+JSBzZWxlY3QoWFgsIGNvbSksIGJ5ID0gYygnZnJvbScgPSAnWFgnKSkgJT4lCiAgcmVuYW1lKGNvbV9iaWIgPSBjb20pICU+JQogIGxlZnRfam9pbihNICU+JSBzZWxlY3QoWFgsIFBZKSwgYnkgPSBjKCdmcm9tJyA9ICdYWCcpKSAlPiUKICBsZWZ0X2pvaW4oQ19udyAlPiUgc2VsZWN0KG5hbWUsIGNvbSksIGJ5ID0gYygndG8nID0gJ25hbWUnKSkgJT4lCiAgcmVuYW1lKGNvbV9jaXQgPSBjb20pICU+JSAKICBkcm9wX25hKFBZLCBjb21fYmliLCBjb21fY2l0KQpgYGAKCmBgYHtyfQojIHNhdmUKZWxfMm0gJT4lIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL2VsXzJtXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgpgYGB7cn0Kcm0obV8ybSwgZ18ybSwgZWxfMm0sIENfbncpCmBgYAoKCiMgVG9waWNtb2RlbAoKYGBge3J9CmxpYnJhcnkodGlkeXRleHQpCmxpYnJhcnkodG9waWNtb2RlbHMpCmxpYnJhcnkodGV4dHN0ZW0pCmBgYAoKYGBge3J9CiMgRXh0cmFjdCB0ZXh0IHRvIHdvcmsgd2l0aAp0ZXh0X3RpZHkgPC0gTSAlPiUgCiAgYXNfdGliYmxlKCkgJT4lCiAgc2VsZWN0KFhYLCBBQikgJT4lCiAgcmVuYW1lKGRvY3VtZW50ID0gWFgsCiAgICAgICAgIHRleHQgPSBBQikgCmBgYAoKYGBge3J9CiMgU29tZSBpbml0aWFsIGNsZWFuaW5nCnRleHRfdGlkeSAlPD4lIAogIG11dGF0ZSh0ZXh0ID0gdGV4dCAlPiUgCiAgICAgICAgICAgc3RyX3RvX2xvd2VyKCkgJT4lCiAgICAgICAgICAgc3RyX3JlcGxhY2VfYWxsKCImIiwgIi1hbmQtIikgJT4lCiAgICAgICAgICAgc3RyX3JlbW92ZV9hbGwoIi8oJnRyYWRlO3wmcmVnO3wmY29weTt8JiM4NDgyO3wmIzE3NDt8JiMxNjk7KS8uKiIpICU+JQogICAgICAgICAgIGljb252KHRvID0gIlVURi04Iiwgc3ViID0gImJ5dGUiKSAlPiUKICAgICAgICAgICBzdHJfcmVtb3ZlX2FsbCgi77+9LioiKSAlPiUKICAgICAgICAgICBzdHJfcmVtb3ZlX2FsbCgnWzpkaWdpdDpdJykgJT4lCiAgICAgICAgICAgc3RyX3NxdWlzaCgpIAogICkgICU+JQogIGRyb3BfbmEoKSAKYGBgCgpgYGB7cn0KIyBuIGdyYW1zCnRleHRfdGlkeSAlPD4lIAogIHVubmVzdF9uZ3JhbXModGVybSwgdGV4dCwgbmdyYW1fZGVsaW0gPSAnICcsIG5fbWluID0gMSwgbiA9IDMpICU+JSAKICBzZXBhcmF0ZSh0ZXJtLCBjKCJ3b3JkMSIsICJ3b3JkMiIsICJ3b3JkMyIpLCBzZXAgPSAiICIpCmBgYAoKYGBge3J9CiMgU3RvcHdvcmRzCnN0b3Bfd29yZHNfb3duIDwtIHRpYmJsZSgKICB3b3JkID1jKCJ0aGUiLCAicmlnaHRzIiwicmVzZXJ2ZWQiICwgInN0dWR5IiwgInN0dWRpZXMiLCAidGhlc2UiLCAidGhpcyIsICJwYXBlciIsICJyZXN1bHQiLCAibW9kZWwiLCAiYXBwcm9hY2giLCAiYXJ0aWNsZSIsICJhdXRob3IiLCAibWV0aG9kIiwgInVuZGVyc3RhbmQiLCAiZm9jdXMiLCAiZXhhbWluZSIsICJhaW0iLCAiYXJndWUiLCAiaWRlbnRpZnkiLCAiaW5jcmVhc2UiLCAiZGF0dW0iLCAicG90ZW50aWFsIiwgImV4cGxvcmUiLCAiaW5jbHVkZSIsICJpc3N1ZSIsICJwcm9wb3NlIiwgImFkZHJlc3MiLCAiYXBwbHkiLCAicmVxdWlyZSIsICJhbmFseXNlIiwgInJlbGF0ZSIsICJmaW5kaW5nIiwgImFuYWx5emUiLCAiZGlzY3VzcyIsICJjb250cmlidXRlIiwgInB1Ymxpc2giLCAiaW52b2x2ZSIsICJkcmF3IiwgImxlYWQiLCAiZXhpc3QiLCAic2V0IiwgInJlZHVjZSIsICJjcmVhdGUiLCAiZm9ybSIsICJleHBsYWluIiwgInBsYXkiLCAgImFmZmVjdCIsICJyZWdhcmQiLCAiYXNzb2NpYXRlIiwgImVzdGFibGlzaCIsICJmb2xsb3ciLCAiY29uY2x1ZGUiLCAiZGVmaW5lIiwgInN0cm9uZyIsICJhdHRlbXB0IiwgImZpbmFsbHkiLCAiZWxzZXZpZXIiLCAib2ZmZXIiLCAgInRheWxvciIsICJmcmFuY2lzIiwgImNvcHlyaWdodCIsICJzcHJpbmdlciIsICJ3aWxleSIsICJlbWVyYWxkIiwgImNvcHlyaWdodCIsICJiLnYiKSwKICBsZXhpY29uID0gJ293bicpICU+JSAKICBiaW5kX3Jvd3Moc3RvcF93b3JkcykKCiMgTGVtbWF0aXppbmcgCmxlbW1hX293biA8LSB0aWJibGUoICMgV09SSyBJTiBUSEFUICEhISEhISEhISEKICB0b2tlbiA9IGMoInN5c3RlbXMiLCAiaW5zdGl0dXRpb25hbCIsICJ0ZWNobm9sb2dpY2FsIiwgIm5hdGlvbmFsIiwgInJlZ2lvbmFsIiwgInN1c3RhaW5hYmxlIiwgICAgImVudmlyb25tZW50YWwiLCAicG9saXRpY2FsIiwgInBvbGl0aWMiLCAicG9saXRpY3MiKSwKICBsZW1tYSA9IGMoInN5c3RlbSIsICJpbnN0aXR1dGlvbiIsICAgInRlY2hub2xvZ3kiLCAgICAibmF0aW9uIiwgICAicmVnaW9uIiwgICAic3VzdGFpbmFiaWxpdHkiLCAiZW52aXJvbm1lbnQiLCAicG9saWN5IiwgInBvbGljeSIsICJwb2xpY3kiKSkKYGBgCgpgYGB7cn0KdGV4dF90aWR5ICU8PiUKICBmaWx0ZXIoIXdvcmQxICVpbiUgc3RvcF93b3Jkc19vd24kd29yZCwKICAgICAgICAgIXdvcmQyICVpbiUgc3RvcF93b3Jkc19vd24kd29yZCwKICAgICAgICAgIXdvcmQzICVpbiUgc3RvcF93b3Jkc19vd24kd29yZCwKICAgICAgICAgaXMubmEod29yZDEpIHwgc3RyX2xlbmd0aCh3b3JkMSkgPiAyLAogICAgICAgICBpcy5uYSh3b3JkMikgfCBzdHJfbGVuZ3RoKHdvcmQyKSA+IDIsCiAgICAgICAgIGlzLm5hKHdvcmQzKSB8IHN0cl9sZW5ndGgod29yZDMpID4gMikKYGBgCgpgYGB7cn0KbGVtbWFfbmV3IDwtIGxleGljb246Omhhc2hfbGVtbWFzICU+JSAKICBmaWx0ZXIodG9rZW4gIT0gJ2RhdGEnKSAlPiUKICBhbnRpX2pvaW4obGVtbWFfb3duLCBieSA9ICd0b2tlbicpICU+JQogIGJpbmRfcm93cyhsZW1tYV9vd24pCmBgYAoKYGBge3J9CnRleHRfdGlkeSAlPD4lCiAgbXV0YXRlKHdvcmQxID0gd29yZDEgJT4lIGxlbW1hdGl6ZV93b3JkcyhkaWN0aW9uYXJ5ID0gbGVtbWFfbmV3KSwKICAgICAgICAgd29yZDIgPSB3b3JkMiAlPiUgbGVtbWF0aXplX3dvcmRzKGRpY3Rpb25hcnkgPSBsZW1tYV9uZXcpLAogICAgICAgICB3b3JkMyA9IHdvcmQzICU+JSBsZW1tYXRpemVfd29yZHMoZGljdGlvbmFyeSA9IGxlbW1hX25ldykpCmBgYAoKYGBge3J9CnJtKHN0b3Bfd29yZHNfb3duLCBsZW1tYV9vd24sIGxlbW1hX25ldykKYGBgCgoKYGBge3J9CiMgVW5pdGUgYWxsIGFnYWluCnRleHRfdGlkeSAlPD4lCiAgdW5pdGUodGVybSwgd29yZDEsIHdvcmQyLCB3b3JkMywgbmEucm0gPSBUUlVFLCBzZXAgPSAiICIpCmBgYAoKYGBge3J9CiMgVEZJREYgd2VpZ2h0aW5nCnRleHRfdGlkeSAlPD4lCiAgY291bnQoZG9jdW1lbnQsIHRlcm0pICU+JQogIGJpbmRfdGZfaWRmKHRlcm0sIGRvY3VtZW50LCBuKQpgYGAKCmBgYHtyfQojIFRUTQp0ZXh0X2R0bSA8LSB0ZXh0X3RpZHkgJT4lCiAgY2FzdF9kdG0oZG9jdW1lbnQsIHRlcm0sIG4pICU+JSB0bTo6cmVtb3ZlU3BhcnNlVGVybXMoc3BhcnNlID0gLjk5KQpgYGAKCmBgYHtyfQojIEZpbmRpbmcgbnVtbWVyIG9mIHRvcGljcwpsaWJyYXJ5KCJsZGF0dW5pbmciKQoKZmluZF90b3BpY3MgPC0gdGV4dF9kdG0gJT4lCiAgRmluZFRvcGljc051bWJlcigKICAgIHRvcGljcyA9IHNlcShmcm9tID0gNCwgdG8gPSAxNSwgYnkgPSAxKSwKICAgIG1ldHJpY3MgPSBjKCJHcmlmZml0aHMyMDA0IiwgIkNhb0p1YW4yMDA5IiwgIkFydW4yMDEwIiwgIkRldmVhdWQyMDE0IiksCiAgICBtZXRob2QgPSAiR2liYnMiLAogICAgY29udHJvbCA9IGxpc3Qoc2VlZCA9IDEzMzcpLAogICAgbWMuY29yZXMgPSA0TCwKICAgIHZlcmJvc2UgPSBUUlVFCikKCmZpbmRfdG9waWNzICU+JSBGaW5kVG9waWNzTnVtYmVyX3Bsb3QoKSAjIFRha2luZyAxMSB0b3BpY3MKYGBgCgpgYGB7cn0KIyBMREEKbl90b3BpYyA9IDExCgp0ZXh0X2xkYSA8LSB0ZXh0X2R0bSAlPiUgTERBKGsgPSBuX3RvcGljLCBtZXRob2Q9ICJHaWJicyIsIGNvbnRyb2wgPSBsaXN0KHNlZWQgPSAxMzM3KSkKYGBgCgpgYGB7cn0KIyMjIExEQSBWaXoKbGlicmFyeShMREF2aXMpCmpzb25fbGRhIDwtIHRvcGljbW9kZWxzX2pzb25fbGRhdmlzKGZpdHRlZCA9IHRleHRfbGRhLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jX2R0bSA9IHRleHRfZHRtLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kID0gIlRTTkUiKQpqc29uX2xkYSAlPiUgc2VyVmlzKCkKYGBgCgpgYGB7cn0KIyBTYXZlCnRleHRfdGlkeSAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvdGV4dF90aWR5XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKdGV4dF9sZGEgJT4lIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL3RleHRfbGRhXycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKJT4lIHNlclZpcyhvdXQuZGlyID0gcGFzdGUwKCdvdXRwdXQvTERBdml6XycsIHN0cl90b19sb3dlcih2YXJfaW5zdCksICdfJywgc3RyX3RvX2xvd2VyKHZhcl9kZXB0KSwgJy5yZHMnKSkKYGBgCgpgYGB7cn0KIyBjbGVhbiB1cApybSh0ZXh0X3RpZHksIHRleHRfZHRtLCB0ZXh0X2xkYSwganNvbl9sZGEpCmBgYAoKIyBMb2NhbCBjaXRhdGlvbnMKCmBgYHtyfQpDUiA8LSBNICU+JSBjaXRhdGlvbnMoc2VwID0gIjsiKQpgYGAKCmBgYHtyfQpDUiAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvQ1JfJywgc3RyX3RvX2xvd2VyKHZhcl9pbnN0KSwgJ18nLCBzdHJfdG9fbG93ZXIodmFyX2RlcHQpLCAnLnJkcycpKQpgYGAKCgoKYGBge3J9CiNDUkwgPC0gTSAlPiUgbG9jYWxDaXRhdGlvbnMoc2VwID0gIjsiKSAjIEZvciBzb21lIHJlYXNvbiB0YWtlcyBmb3JldmVyLi4uCiNDUkwgJT4lIHNhdmVSRFMocGFzdGUwKCcuLi90ZW1wL0NSTF8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKYGBge3J9CnJtKENSLCBDUkwpCmBgYAoKCiMgSGlzdG9yaWNhbCBjaXRhdGlvbgoKYGBge3J9CiMgQ3JlYXRlIGEgaGlzdG9yaWNhbCBjaXRhdGlvbiBuZXR3b3JrCmhpc3RSZXN1bHRzIDwtIE0gJT4lIGhpc3ROZXR3b3JrKHNlcCA9ICI7IikKYGBgCgpgYGB7cn0KaGlzdFJlc3VsdHMgJT4lIGhpc3RQbG90KG4gPSA1MCwgc2l6ZSA9IDEwLCBsYWJlbHNpemUgPSA1KQpgYGAKCmBgYHtyfQpoaXN0UmVzdWx0cyAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvaGlzdFJlc3VsdF8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCmBgYAoKYGBge3J9CnJtKGhpc3RSZXN1bHRzKQpgYGAKCiMgT3RoZXIgc3R1ZmYKCiMjIFRocmVlZmllbGQgUGxvdAoKYGBge3J9Ck1fdGhyZWVmaWVsZCA8LSBNICU+JSBhcy5kYXRhLmZyYW1lKCkgJT4lIHRocmVlRmllbGRzUGxvdChmaWVsZHMgPSBjKCJBVSIsICJERSIsICJDUl9TTyIpLCBuID0gYygyMCwgMjAsIDEwKSkKTV90aHJlZWZpZWxkCmBgYAoKYGBge3J9Ck1fdGhyZWVmaWVsZCAlPiUgc2F2ZVJEUyhwYXN0ZTAoJy4uL3RlbXAvdGhyZWVmaWVsZF8nLCBzdHJfdG9fbG93ZXIodmFyX2luc3QpLCAnXycsIHN0cl90b19sb3dlcih2YXJfZGVwdCksICcucmRzJykpCgpgYGAKCgoKcm0oTV90aHJlZWZpZWxkKQoKI00gJT4lIGF1dGhvclByb2RPdmVyVGltZShrID0gMTAsIGdyYXBoID0gVFJVRSkKI00gJT4lIHJweXMoc2VwID0gIjsiLCBncmFwaCA9IFQpCiNNICU+JSB0aGVtYXRpY01hcCgpCiNNX3RoZW1fZXZvIDwtIE0gJT4lIHRoZW1hdGljRXZvbHV0aW9uKHllYXJzID0gYygyMDE2LCAyMDE4LDIwMjEpKQoKCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKCgojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiMgQ29uY2VwdHVhbCBTdHJ1Y3R1cmUKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwoKI0NTIDwtIE0gJT4lIGNvbmNlcHR1YWxTdHJ1Y3R1cmUoZmllbGQ9IklEIiwgbWV0aG9kPSJDQSIsIG1pbkRlZ3JlZT00LCBjbHVzdD01LCBzdGVtbWluZz1GQUxTRSwgbGFiZWxzaXplPTEwLCBkb2N1bWVudHM9MTApCiNDUyAlPiUgc2F2ZVJEUygiLi4vdGVtcC9DUy5SRFMiKQojcm0oQ1MpCgoKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwojIE90aGVyIG5ldHdvcmsgbGV2ZWxzCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyBtYXRfYmliICU8PiUgbm9ybWFsaXplU2ltaWxhcml0eSh0eXBlID0gImFzc29jaWF0aW9uIikgIyBOT1RFOiBXZSBkbyBub3Qgbm9ybWFsaXplIG9uIHRoZSBiaWJsaW8tbmV0d29yayBwdWJsaWNhdGlvbiBsZXZlbCBhbnltb3JlLgoK